package com.lsa.letcode.the15.the3sum;


public class Mm {
//	
	private static int moveLeft(int[] arr, int i) {
		int prev = arr[i];
		while(i > 0) {
			i--;
			if (arr[i] != prev || (i > 0 && arr[i - 1] != prev)) {
				break;
			}
		}
		return i;
	}
	
	public static void main(String[] args) {
//		int[] arr = new int[]{
//				-2, -2, -1, -1, 1, 1, 1, 2, 3, 4
//				};
		
		int[] arr = new int[]{
			//   0,  1,  2, 3, 4, 5
				-4, -1, -1, 0, 1, 2
				};
		
//		int[] arr = new int[]{
//				1, 2, 3, 4, 5
//				};
		//		 0, 1, 2, 3,4,5,6,7,8,9
		
		///-2,-2,-1,-1,1,1,1,2,3,4
		// -2, -1, 1, 2, 3, 4
		
//		int[] arr = new int[]{
//				1, 1, 1, 2, 2, 3, 3, 3, 3
//				};
//		
//		int prevR = arr[arr.length - 1] + 1;
//		int prevL = arr[0] - 1;
//		for (int i = arr.length - 1; i > -1; i--) {
//			for (int j = i - 1; j > -1; j--) {
////				System.out.print(String.format("{(%s, %s)=>(%s, %s)}", i,j,arr[i],arr[j]));
//				int r = arr[i];
//				int l = arr[j];
//				System.out.print(String.format("{(%s, %s)}", r,l));
//				prevR = r;
//				prevL = l;
//			}
//			System.out.println();
//		}
		
//		{
//			int prevR = arr[arr.length - 1] + 1;
//			int prevL = arr[0] - 1;
//			
//			int j = arr.length - 1;
//			int i = j - 1;
//			
//			while(i > -1) {
//				int l = arr[i];
//				int r = arr[j];
//				
//				System.out.print(String.format("{(%s, %s)}", r, l));
//				
//				prevR = r;
//				prevL = l;
//				
//				//decrease i or j minimum possible way
//				i--;
//				
//				if (i < 0) {
//					j--;
//					
//					if (j < 1) {
//						break;
//					}
//					else {
//						i = j - 1;
//						if (i < 0) {
//							break;
//						}
//						System.out.println();
//					}
//				}
//			}
//		}
		
		{
			int j = arr.length - 1;
			int i = moveLeft(arr, j);
			
			
			while(i > -1 && arr[i] == arr[j]) {
				i--;
			}
			
			while(i > -1) {
				int l = arr[i];
				int r = arr[j];
				
				System.out.print(String.format("(%s,%s)->(%s, %s);", i, j, r, l));
				
				//decrease i or j minimum possible way
				i = moveLeft(arr, j);
				
				if (i < 0) {
					while(j > -1 && arr[j] == r) {
						j--;
					}
					
					if (j < 1) {
						break;
					}
					else {
						i = moveLeft(arr, j);
						if (i < 0) {
							break;
						}
						System.out.println();
					}
				}
			}
		}
		
//		for (int i = 0; i < arr.length; i++) {
//			for (int j = arr.length - 1; j - i > 1 ; j --) {
//				System.out.print(String.format("{(%s, %s)=>(%s, %s)}", i,j,arr[i],arr[j]));
//			}
//			System.out.println();
//		}
		
//		int num_length = arr.length;
//		for (int l = num_length; l >= 2; l--) {
//			for (int i = 0; i < num_length - l + 1; i++) {
////    		for (int i = num_length - l; i > -1; i--) {
//				int j = l + i - 1;
//				System.out.print(String.format("(%s,%s)->(%s,%s);", i, j,arr[i],arr[j]));
//			}
//			System.out.println();
//		}
	}
}
